package org.jsola.contract.service;

import org.jsola.contract.dao.IContractCredentialSiteDAO;
import org.jsola.contract.dto.ContractCredentialSiteAddDTO;
import org.jsola.contract.dto.ContractCredentialSiteUpdateDTO;
import org.jsola.contract.entity.ContractCredentialSiteDO;
import org.jsola.contract.query.ContractCredentialSiteQuery;
import org.jsola.contract.vo.ContractCredentialSiteListVO;
import org.jsola.contract.vo.ContractCredentialSiteVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 租户开通的电子合同账号
 *
 * @author JanusMix
 */
public interface IContractCredentialSiteService extends IService<IContractCredentialSiteDAO, ContractCredentialSiteDO> {

    /**
     * 新增租户开通的电子合同账号
     * @param contractCredentialSiteAddDTO 新增租户开通的电子合同账号DTO
     * @param tokenUser 当前用户
     * @return 租户开通的电子合同账号详情信息
     */
    ContractCredentialSiteVO save(ContractCredentialSiteAddDTO contractCredentialSiteAddDTO, TokenUser tokenUser);

    /**
     * 修改租户开通的电子合同账号
     * @param contractCredentialSiteUpdateDTO 修改租户开通的电子合同账号DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(ContractCredentialSiteUpdateDTO contractCredentialSiteUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除租户开通的电子合同账号，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param contractCredentialSiteIds 租户开通的电子合同账号id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long...contractCredentialSiteIds);

    /**
     * 根据租户开通的电子合同账号id查找
     * @param contractCredentialSiteId 租户开通的电子合同账号id
     * @param siteId 所属站点id
     * @return 租户开通的电子合同账号详情信息
     */
    ContractCredentialSiteVO selectById(Long contractCredentialSiteId, String siteId);

    /**
     * 查询租户开通的电子合同账号
     * @param contractCredentialSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户开通的电子合同账号列表信息
     */
    List<ContractCredentialSiteListVO> select(ContractCredentialSiteQuery contractCredentialSiteQuery, String siteId);

    /**
    * 查询租户开通的电子合同账号记录数
    * @param contractCredentialSiteQuery 查询条件
    * @param siteId 所属站点id
    * @return 租户开通的电子合同账号记录数
    */
    int selectCount(ContractCredentialSiteQuery contractCredentialSiteQuery, String siteId);

    /**
     * 分页查询租户开通的电子合同账号
     * @param contractCredentialSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户开通的电子合同账号列表信息
     */
    Page<ContractCredentialSiteListVO> selectPage(ContractCredentialSiteQuery contractCredentialSiteQuery, String siteId);


    /**
     * 根据租户开通的电子合同账号id查找
     * @param contractCredentialSiteId 租户开通的电子合同账号id
     * @param siteId 所属站点id
     * @return 租户开通的电子合同账号
     */
    ContractCredentialSiteDO selectDOById(Long contractCredentialSiteId, String siteId);

    /**
     * 查询租户开通的电子合同账号
     * @param contractCredentialSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户开通的电子合同账号列表
     */
    List<ContractCredentialSiteDO> selectDO(ContractCredentialSiteQuery contractCredentialSiteQuery, String siteId);

    /**
     * 获取租户开通的e签宝账号
     *
     * @param siteId 站点id
     * @return 租户开通的账号
     */
    ContractCredentialSiteDO selectSiteCredential(String siteId);

    /**
     * 删除租户绑定的账号
     *
     * @param credentialId 凭证id
     * @param tokenUser 当前登录用户
     */
    void deleteByCredentialId(String credentialId, TokenUser tokenUser);

    /**
     * 查询租户绑定的账号
     *
     * @param credentialId 凭证id
     * @param tokenUser 当前登录用户
     */
    ContractCredentialSiteDO selectByCredentialId(String credentialId, TokenUser tokenUser);
}


